package main

import "fmt"

// 声明了一个函数类型
type processFunc func(int) bool

func main() {
	slice := []int{1, 2, 3, 4, 5, 7}
	fmt.Println("slice = ", slice)
	// 函数当作值来传递
	odd := filter(slice, isOdd)
	fmt.Println("奇数元素", odd)
	// 函数当作值来传递
	even := filter(slice, isEven)
	fmt.Println("偶数元素", even)
}

// 判断元素是否是偶数
func isEven(integer int) bool {
	return integer%2 == 0
}

// 判断元素是否是奇数
func isOdd(integer int) bool {
	return integer%2 != 0
}

// 根据函数来处理切片，根据元素奇数偶数分组，返回新的切片
func filter(slice []int, f processFunc) []int {
	var result []int
	for _, value := range slice {
		if f(value) {
			result = append(result, value)
		}
	}
	return result
}
